package cj.hrm.service;

import cj.hrm.dto.EmployeeDto;
import cj.hrm.entity.*;
import cj.hrm.util.page.PageModel;

import java.util.Date;
import java.util.List;

public interface HrmService {
    /**
     * 用户登录
     *
     * @param loginname
     * @param password
     * @return User对象
     */
    User login(String loginname, String password);

    /**
     * 根据登录名和和用户名查找用户
     *
     * @param loginname
     * @param username
     * @return User对象
     */
    User findUserByLoginAndName(String loginname, String username);

    /**
     * 根据登录名查找用户
     *
     * @param loginname
     * @return User对象
     */
    User findUserByLogin(String loginname);

    /**
     * 根据邮箱查找用户
     *
     * @param email
     * @return User对象
     */
    User findUserByEmail(String email);

    /**
     * 根据用户名查找用户
     *
     * @param username
     * @return User对象
     */
    User findUserByName(String username);

    /**
     * 根据id查询用户
     *
     * @param id
     * @return 用户对象
     */
    User findUserById(Integer id);

    /**
     * 根据id删除用户
     *
     * @param id
     */
    void removeUserById(Integer id);

    /**
     * 修改用户
     *
     * @param user 用户对象
     */
    void modifyUser(User user);

    /**
     * 添加用户
     *
     * @param user 用户对象
     */
    void addUser(User user);

    /**
     * 获得所有用户
     *
     * @return User对象的List集合
     */
    List<User> findUser(User user, PageModel pageModel);

    void toUpdatePassword(String loginname, String password);

    List<User> get_UserList(User user, PageModel pageModel);

    List<User> get_UserLikeList(String content);

    List<User> get_UserEmail();

    Integer countUser(String content);

    Integer getEmpIdByUserId(Integer id);

    //************************部门信息***********************

    /**
     * 获得所有部门
     *
     * @return Dept对象的List集合
     */
    List<Dept> findAllDept();

    /**
     * 获得所有部门，分页查询
     *
     * @return Dept对象的List集合
     */
    List<Dept> findDept(Dept dept, PageModel pageModel);

    /**
     * 根据content获得所有部门
     *
     * @param content
     * @return Dept对象的List集合
     */
    List<Dept> findAllDeptByContent(String content);

    //添加部门
    void addDept(Dept dept);

    /**
     * 根据name查询部门
     *
     * @param name
     * @return 部门对象
     */
    Dept findDeptByName(String name);

    /**
     * 根据id查询部门
     *
     * @param id
     * @return 部门对象
     */
    Dept findDeptById(Integer id);

    /**
     * 修改部门
     *
     * @param dept 部门对象
     */
    void modifyDept(Dept dept);

    /**
     * 根据id删除部门
     *
     * @param id
     */
    public void removeDeptById(Integer id);

    //*****************************职位信息**************

    /**
     * 获得所有职位
     *
     * @return Job对象的List集合
     */
    List<Job> findAllJob();

    List<Job> findAllJob(String content);
    List<Job> findJob(Job job, PageModel pageModel);
    /**
     * 根据id查询职位
     *
     * @param id
     * @return 职位对象
     */
    Job findJobById(Integer id);

    /**
     * 根据name查询职位
     *
     * @param name
     * @return 职位对象
     */
    Job findJobByName(String name);

    /**
     * 添加职位
     *
     * @param job
     * @return 职位对象
     */
    void addJob(Job job);

    /**
     * 根据id删除职位
     *
     * @param id
     */
    public void removeJobById(Integer id);

    /**
     * 修改职位
     *
     * @param job
     */
    void modifyJob(Job job);
    //*********************员工信息***********

    /**
     * @param employee  查询条件
     * @param pageModel 分页对象
     * @return Dept对象的List集合
     * @descriptions 获得所有员工
     */
    List<Employee> findEmployee(Employee employee, PageModel pageModel);

    List<Employee> get_EmployeeLikeList(String content);

    Integer countEmployee(String content);

    /**
     * 根据name查询员工
     *
     * @param employee_name
     * @return 员工对象
     */
    Integer findEmployeeByName(String employee_name);

    /**
     * 查询所有员工
     * @return
     */
    List<EmployeeDto> findEmployeeDtoList();

    /**
     * 根据id查询员工
     *
     * @param id
     * @return 员工对象
     */
    Employee findEmployeeById(Integer id);

    /**
     * 修改员工
     *
     * @param employee 员工对象
     */
    void modifyEmployee(Employee employee);

    /**
     * 添加员工
     *
     * @param employee 员工对象
     */
    void addEmployee(Employee employee);

    /**
     * 根据id删除员工
     *
     * @param id
     */
    void removeEmployeeById(Integer id);
    //*************考勤信息

    /**
     * @param checkwork 查询条件
     * @param pageModel 分页对象
     * @return Dept对象的List集合
     * @descriptions 获得所有员工
     */
    List<Checkwork> findCheckwork(Checkwork checkwork, PageModel pageModel);

    List<Checkwork> findCheckworkLikeList(String content);

    Integer countCheckwork(String content);

    /**
     * 根据员工id查询考勤信息
     *
     * @param id
     * @return 考勤对象
     */
    Checkwork findCheckworkByEmp_id(Integer id);

    /**
     * 根据id查询考勤信息
     *
     * @param id
     * @return 考勤对象
     */
    Checkwork findCheckworkById(Integer id);

    /**
     * @param checkwork
     * @descriptions 修改考勤信息
     */
    void modifyCheckwork(Checkwork checkwork);

    /**
     * @param checkwork
     * @descriptions 添加考勤信息
     */
    void addCheckwork(Checkwork checkwork);

    /**
     * @param id
     * @descriptions 根据id删除考勤信息
     */
    void removeCheckworkById(Integer id);
    //*******************公告信息********

    /**
     * 获得所有公告
     *
     * @return Notice对象的List集合
     */
    List<Notice> findNotice(Notice notice, PageModel pageModel);

    List<Notice> get_NoticeLikeList(String content);

    Integer countNotice(String content);

    /**
     * 根据id查询公告
     *
     * @param id
     * @return 公告对象
     */
    Notice findNoticeById(Integer id);

    /**
     * 根据id删除公告
     *
     * @param id
     */
    public void removeNoticeById(Integer id);

    /**
     * 添加公告
     *
     * @param notice 公告对象
     */
    void addNotice(Notice notice);

    /**
     * 修改公告
     *
     * @param notice 公告对象
     */
    void modifyNotice(Notice notice);

    //*****************
    List<Sex> findAllSex(String content);
    List<Sex> findAllSex();

    List<Education> findAllEducation(String content);
    List<Education> findAllEducation();

    List<Status> findAllStatus(String content);
    List<Status> findAllStatus();

    Integer findChe_id();
    //为shiro些一个根据登录名查用户信息，即登录名和密码的方法
    User findUserMessageByLoginname(String loginname);
    //***********************************************************
    //招聘
    //获得所有招聘信息，返回Recruitment对象的List集合
    List<Recruitment> findAllRecruitment();
    List<Recruitment> get_RecruitmentLikeList(String content);
    //获得所有招聘信息，分页查询
    List<Recruitment> findRecruitment(Recruitment recruitment, PageModel pageModel);
    //根据id查询招聘信息
    Recruitment findRecruitmentById(Integer id);
    //添加简历
    void addResume(Resume resume);
    //根据id删除招聘信息
    void removeRecruitmentById(Integer id);
    List<Resume> get_ResumeLikeList(String content);
    //获得所有的简历，分页查询
    List<Resume> findResume(Resume resume, PageModel pageModel);
    ////根据id查询简历
    Resume findResumeById(Integer id);
    //修改简历
    void modifyResume(Resume resume);
    Integer countResume(String content);
    Integer countRecruitment(String content);
    //获得所有职业类型
    List<JobType> findAllJobType();
    //获得所有招聘状态
    List<RecruitmentStatus> findAllRecruitmentStatus();
    //添加招聘
    void addRecruitment(Recruitment recruitment);
    //修改招聘
    void modifyRecruitment(Recruitment recruitment);


    // 按日期 用户id去查询
    PunchClock getPunchClockByDateAndUserId(String date, Integer userID);

    void addPunchClock(PunchClock punchClock);

    void modifyPunchClock(Integer id, String date, Date date1, int status);

    List<PunchClock> findAllPunchById(Integer id);

    void modifyPunchClocks(Integer id, String date, Date date1, int status, int offwork_status_id);

    PunchClock findPunchClockById(Integer id);

    void modifyPunchClockContent(Integer id, String content);

    List<PunchClock> getPunchClockByUserID(Integer id, String date);

    PunchTime getPt();

    void updatePt(String am, String pm, Integer id);

    List<Document> get_DocumentList(Document document, PageModel pageModel);
    List<Document> get_DocumentLikeList(String content);
    Integer countDocument(String content);
    Document get_DocumentInfo(Integer id);
    void update_DocumentInfo(Document notice);
    void insert_DocumentInfo(Document notice);
    void delete_DocumentInfo(Integer id);

}
